import { ErrorMessageMode } from '#/axios';
import { UserModel } from '@2/typings/model/user.model';
import { SocialToken } from '@2/typings/oauth2';
import { AppUser } from '@2/typings/model/app.user';
import { LoginModel } from '@2/typings/model/login.model';

/**
 * @program: microservice-central-portal
 * @description: 用户服务接口定义，用于定义用户登录、退出、刷新TOKEN等操作接口定义，以及用户信息获取接口定义
 * @author: baiHoo.chen
 * @create: 2022年5月20日
 **/
export interface UserService {
  /**
   * 用于平台登录入口页调用接口，
   * @param params 必须提供 账户和凭证密码
   * @return 登录用户信息 {@link LoginAppUser}
   */
  login(params: LoginModel & { goHome?: boolean; mode?: ErrorMessageMode }): Promise<UserModel>;
  /**
   * 用户登录成功之后，所必须处理的行动项调用函数，包含对用户动态权限路由的处理，以及 session 过期处理
   * @param goHome 是否返回首页
   * @return 登录用户信息 {@link AppUser}
   */
  afterLoginAction(goHome?: boolean): Promise<AppUser | null>;
  /**
   * 获取用户信息行动项
   * @return 登录用户信息 {@link AppUser}
   */
  getAppUser(): Promise<AppUser | null>;
  /**
   * 退出登录
   */
  logout(goLogin: boolean);
  /**
   * 验证刷新 TOKEN
   * @param doRefresh
   */
  validateJwtToken(doRefresh: boolean);
  /**
   * 验证TOKEN是否有效
   * @param socialToken
   */
  isTokenValid(socialToken?: SocialToken): boolean;
  /**
   * 退出登录前确认操作
   */
  confirmLoginOut();
}
